package Metier.Controleurs;

import Donnees.DaoHDP;
import Metier.Objets.HeurePointe;
import Presentation.FenetrePrincipale;
import Presentation.Onglet;
import java.sql.SQLException;
import java.text.DecimalFormat;
import java.text.ParseException;
import java.util.List;
import java.util.Locale;
import java.util.ResourceBundle;
import javax.swing.table.DefaultTableModel;

/**
 * Classe gestionnaire gérant le paramétrage des heures de pointe
 */
public class GestionParamHDP {
    
    private final DaoHDP daoHDP;
    private final ResourceBundle configBundle;
    
    /**
     * Constructeur par défaut
     * @param onglet onglet faisant le lien avec la fenêtre principale
     */
    public GestionParamHDP(Onglet onglet) {
        this.daoHDP = new DaoHDP();
        
        if (onglet == null) {
            this.configBundle = ResourceBundle.getBundle("ressources/Config/Config", Locale.FRENCH);
        } else {
            this.configBundle = ResourceBundle.getBundle("ressources/Config/Config", onglet.getFP().getLocale());
        }
    }
    
    /**
     * Permet de récupérer le contenu du tableau des paramètres des HDP avec l'entête des colonnes et le contenu
     * @return le modèle de la table
     */
    public DefaultTableModel getContenuTableauHDP() {
        DefaultTableModel tableModel = new DefaultTableModel();
        DecimalFormat df = new DecimalFormat("00");
        
        tableModel.addColumn(configBundle.getString("config.heurededebut"));
        tableModel.addColumn(configBundle.getString("config.heuredefin"));
        tableModel.addColumn(configBundle.getString("config.supprimer"));
        tableModel.addColumn("id");
        
        Object[] rowdata = new Object[4];
        try {
            List<HeurePointe> listHDP = daoHDP.rechercher();
            
            for(HeurePointe h : listHDP) {
                rowdata[0] = df.format(h.getHeureDebut().getHeure()) + ":" + df.format(h.getHeureDebut().getMinute());
                rowdata[1] = df.format(h.getHeureFin().getHeure()) + ":" + df.format(h.getHeureFin().getMinute());
                rowdata[2] = configBundle.getString("config.supprimer");
                rowdata[3] = h.getId();
                
                tableModel.addRow(rowdata);
            }
        }catch (SQLException e) {
            e.printStackTrace();
            FenetrePrincipale.afficherPopupErreur(configBundle.getString("config.erreurbdd"));
        }
        catch(Exception e){
            e.printStackTrace();
            FenetrePrincipale.afficherPopupErreur(configBundle.getString("config.erreurinterne"));
        }
        return tableModel;
    }
    
    /**
     * Ajout d'une tranche d'heures de pointe
     * @param heureDebut  heure de début
     * @param minutesDebut  minute de début
     * @param heureFin  heure de fin
     * @param minutesFin  minute de fin
     */
    public void ajouterHDP(int heureDebut, int minutesDebut, int heureFin, int minutesFin){
        try{
            this.daoHDP.ajouter(new HeurePointe(heureDebut, minutesDebut, heureFin, minutesFin));
        }
        catch(SQLException e){
            e.printStackTrace();
            FenetrePrincipale.afficherPopupErreur(configBundle.getString("config.erreurbdd"));
        } catch (ParseException e) {
            e.printStackTrace();
            FenetrePrincipale.afficherPopupErreur(configBundle.getString("config.erreurinterne"));
        }
    }
    
    /**
     * Suppression d'une tranche d'heures de pointe à partir d'un identifiant
     * @param idHdp  identifiant de la tranche d'heures de pointe
     */
    public void supprimerHDP(int idHdp){
        
        try{
            //Suppression d'heures de pointe
            this.daoHDP.supprimer(idHdp);
        }
        catch(SQLException e){
            e.printStackTrace();
            FenetrePrincipale.afficherPopupErreur(configBundle.getString("config.erreurbdd"));
        }
        catch(Exception e){
            e.printStackTrace();
            FenetrePrincipale.afficherPopupErreur(configBundle.getString("config.erreurinterne"));
        }
    }
}
